package org.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 菜品实体类
 * 对应数据库中的dish表
 * 
 * @author 系统
 * @since 1.0
 */
@Data
@TableName("dish")
public class Dish implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜品ID - 主键，使用雪花算法生成
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 菜品名称
     */
    private String name;

    /**
     * 菜品分类ID - 关联category表
     */
    private Long categoryId;

    /**
     * 菜品价格 - 使用BigDecimal确保精度
     */
    private BigDecimal price;

    /**
     * 菜品编码 - 唯一标识
     */
    private String code;

    /**
     * 菜品图片路径
     */
    private String image;

    /**
     * 菜品描述
     */
    private String description;

    /**
     * 菜品状态 - 0:停售 1:启售
     */
    private Integer status;

    /**
     * 排序字段
     */
    private Integer sort;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 创建人ID
     */
    private Long createUser;

    /**
     * 更新人ID
     */
    private Long updateUser;

    /**
     * 逻辑删除标识 - 0:未删除 1:已删除
     */
    private Integer isDeleted;

    // ==================== Getter 和 Setter 方法 ====================
    // 手动添加 getter 和 setter 方法（Lombok 可能没有正确生成）
    
    /**
     * 获取菜品ID
     * @return 菜品ID
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置菜品ID
     * @param id 菜品ID
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取菜品名称
     * @return 菜品名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置菜品名称
     * @param name 菜品名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取菜品分类ID
     * @return 菜品分类ID
     */
    public Long getCategoryId() {
        return categoryId;
    }

    /**
     * 设置菜品分类ID
     * @param categoryId 菜品分类ID
     */
    public void setCategoryId(Long categoryId) {
        this.categoryId = categoryId;
    }

    /**
     * 获取菜品价格
     * @return 菜品价格
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * 设置菜品价格
     * @param price 菜品价格
     */
    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    /**
     * 获取菜品编码
     * @return 菜品编码
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置菜品编码
     * @param code 菜品编码
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取菜品图片路径
     * @return 菜品图片路径
     */
    public String getImage() {
        return image;
    }

    /**
     * 设置菜品图片路径
     * @param image 菜品图片路径
     */
    public void setImage(String image) {
        this.image = image;
    }

    /**
     * 获取菜品描述
     * @return 菜品描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置菜品描述
     * @param description 菜品描述
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * 获取菜品状态
     * @return 菜品状态 (0:停售 1:启售)
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置菜品状态
     * @param status 菜品状态 (0:停售 1:启售)
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获取排序字段
     * @return 排序字段
     */
    public Integer getSort() {
        return sort;
    }

    /**
     * 设置排序字段
     * @param sort 排序字段
     */
    public void setSort(Integer sort) {
        this.sort = sort;
    }

    /**
     * 获取创建时间
     * @return 创建时间
     */
    public LocalDateTime getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     * @param createTime 创建时间
     */
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取更新时间
     * @return 更新时间
     */
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置更新时间
     * @param updateTime 更新时间
     */
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    /**
     * 获取创建人ID
     * @return 创建人ID
     */
    public Long getCreateUser() {
        return createUser;
    }

    /**
     * 设置创建人ID
     * @param createUser 创建人ID
     */
    public void setCreateUser(Long createUser) {
        this.createUser = createUser;
    }

    /**
     * 获取更新人ID
     * @return 更新人ID
     */
    public Long getUpdateUser() {
        return updateUser;
    }

    /**
     * 设置更新人ID
     * @param updateUser 更新人ID
     */
    public void setUpdateUser(Long updateUser) {
        this.updateUser = updateUser;
    }

    /**
     * 获取逻辑删除标识
     * @return 逻辑删除标识 (0:未删除 1:已删除)
     */
    public Integer getIsDeleted() {
        return isDeleted;
    }

    /**
     * 设置逻辑删除标识
     * @param isDeleted 逻辑删除标识 (0:未删除 1:已删除)
     */
    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }
}

